package com.dl.mall.service.user.impl;

import com.dl.mall.entity.Cart;
import com.dl.mall.entity.vo.CartVo;
import com.dl.mall.mapper.CartMapper;
import com.dl.mall.service.user.CartService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author DL
 * @create 2022-03-24 20:20
 */
@Service
@Transactional
public class CartServiceImpl implements CartService {

    @Resource
    private CartMapper cartMapper;

    /**
     * 普通减少，无逻辑
     * @param userId 用户名
     * @param specsId 产品规格id
     * @return 是否成功
     */
    @Override
    public boolean decreaseCart(String userId, String specsId) {
        return cartMapper.decreaseCart(userId, specsId) != 0;
    }

    /**
     * 普通添加，无逻辑
     * @param userId 用户名
     * @param specsId 产品规格id
     * @return 是否成功
     */
    @Override
    public boolean increaseCart(String userId, String specsId) {
        return cartMapper.increaseCart(userId, specsId) != 0;
    }

    /**
     * 向购物车添加商品，普通添加无逻辑
     * @param userId 用户名
     * @param specsId 产品规格id
     * @return 是否成功
     */
    @Override
    public boolean addCart(String userId, String specsId) {
        return cartMapper.insertCart(userId, specsId) != 0;
    }

    /**
     * 向购物车添加商品，逻辑添加，先判断是否存在；存在则是更新数量
     * @param userId 用户名
     * @param specsId 产品规格id
     * @return 是否成功
     */
    @Override
    public boolean addCart(String userId, String specsId, boolean isComplex) {

        Cart cart = getCart(userId, specsId);

        boolean flag = false;

        if (cart == null){
            // 如果不存在就增加商品
            flag = addCart(userId, specsId);
        }else {
            // 如果存在就增加这个商品的数量
            flag = modifyCart(userId, specsId ,cart.getCount() + 1);
        }

        return flag;
    }

    /**
     * 删除购物车某项商品
     * @param userId 用户名
     * @param specsIdList 产品规格id
     * @return 是否成功
     */
    @Override
    public boolean removeCart(String userId, List<Object> specsIdList) {
        return cartMapper.deleteCart(userId, specsIdList) != 0;
    }

    /**
     * 向购物车添加商品
     * @param userId 用户名
     * @param specsId 产品规格id
     * @param count 个数
     * @return 是否成功
     */
    @Override
    public boolean modifyCart(String userId, String specsId, int count) {
        return cartMapper.updateCart(userId, specsId, count) != 0;
    }

    /**
     * 根据 用户id 和 规格id（sku） 查询购物车
     * 向购物车添加商品，逻辑添加，先判断是否存在；存在则是更新数量
     * @param userId 用户名
     * @param specsId 产品规格id
     * @return 是否存在
     */
    @Override
    public Cart getCart(String userId, String specsId) {
        return cartMapper.queryCartByUserIdAndSpecsId(userId, specsId);
    }

    /**
     * 根据 用户id 查询购物车所有产品
     * @param userId 用户id
     * @return 购物车所有产品
     */
    @Override
    public List<CartVo> getAllCart(String userId) {
        return cartMapper.queryAllCart(userId);
    }
}
